package com.example.newinfinity.View.DrawShape

import android.graphics.Canvas

//画贝塞尔曲线
class BezierShape() : Shape() {

    override fun setStartPoint(x: Float, y: Float) {
        super.setStartPoint(x, y)
    }

    override fun setEndPoint(x: Float, y: Float) {
        super.setEndPoint(x, y)
        /*mPath.reset()
        val mSpace = (endX - startX) * 0.4f //得到贝塞尔曲线的四分之一长度
        val mHeightSpace = Math.abs(endY - startY) / 2   //得到贝塞尔曲线波峰到波谷距离的一半
        //val mTop = Math.min(startY,endY)     //得到波峰
        //val mBottom = Math.max(startY,endY)  //得到波谷
        val mStartY = (startY + endY) / 2  //获取贝塞尔曲线的起始点的纵坐标
        val mEndY = (startY + endY) / 2    //获取贝塞尔曲线的终点的纵坐标
        mPath.moveTo(startX, mStartY)      //设定起点
        mPath.cubicTo(      //设定该贝塞尔曲线的波峰和波谷的两个控制点，以及终点
            startX + mSpace, mStartY - 3.45f * mHeightSpace,
            endX - mSpace, mStartY + 3.45f * mHeightSpace,
            endX, mEndY
        )*/
    }

    private fun updateBezierPath() {
        mPath.reset()
        // 计算关键点坐标
        val left = rectF.left
        val right = rectF.right
        val top = rectF.top
        val bottom = rectF.bottom
        val centerX = rectF.centerX()
        val centerY = rectF.centerY()
        // 起点（左边界中点）
        mPath.moveTo(left, centerY)
        // 三阶贝塞尔曲线（控制点在上边界中点和下边界中点）
        mPath.cubicTo(
            /* 控制点1 */ centerX, top,     // 上边界中点
            /* 控制点2 */ centerX, bottom,  // 下边界中点
            /* 终点 */    right, centerY    // 右边界中点
        )
    }

    override fun draw(canvas: Canvas) {
        updateBezierPath()
        canvas.drawPath(mPath, mPaint)
        //继承父类 拖拉点拽状态为selected时显示边框及四个拖拉圆点
        super.draw(canvas)
    }

    override fun containsPointInPath(x: Float, y: Float): Boolean {
        return super.containsPointInPath(x, y)
    }
}